function delta = delta_function(N, pos)
    % N: 序列的正半轴长度（负半轴对称）
    % pos: 冲击序列为 1 的位置（从 -N 到 N 的索引）
    
    % 构建长度为 2N+1 的向量，初始化为 0
    delta = zeros(1, 2*N+1);
    
    % 将 pos 调整到向量索引范围内
    % pos 可能为负数，我们需要将它转换为从 1 到 2N+1 的索引
    delta(N + pos + 1) = 1; % +1 是因为 MATLAB 的索引从 1 开始
end

% 主脚本部分
% 定义冲击序列长度 N
N = 10;

% 初始化 x(n) 为零向量
x_n = zeros(1, 2*N + 1);
% 计算 x(n)
x_n = x_n + delta_function(N, 0);   % δ(n)
x_n = x_n + 2 * delta_function(N, 1); % 2δ(n-1)
x_n = x_n + 3 * delta_function(N, 2); % 3δ(n-2)
x_n = x_n + 4 * delta_function(N, 3); % 4δ(n-3)
x_n = x_n + 5 * delta_function(N, 4); % 5δ(n-4)

% 初始化 h(n) 为零向量
h_n = zeros(1, 2*N + 1);
% 计算 h(n)
h_n = h_n + delta_function(N, 0);     % δ(n)
h_n = h_n + 2 * delta_function(N, 1); % 2δ(n-1)
h_n = h_n + delta_function(N, 2);     % δ(n-2)
h_n = h_n + 2 * delta_function(N, 3);     % δ(n-3)

% 计算信号的逐点乘积
product_n = x_n .* h_n;

% 创建 n 的索引
n_x = -N:N; % x(n) 的索引
n_h = -N:N; % h(n) 的索引
n_product = -N:N; % 乘积的索引（与 x(n) 和 h(n) 的长度相同）

% 绘制原序列 x(n)
figure; % 创建新图形窗口
subplot(3, 1, 1); % 创建 3 行 1 列的子图，第 1 个子图
stem(n_x, x_n, 'filled', 'LineWidth', 1.5);
title('Discrete Signal x(n)');
xlabel('n');
ylabel('Amplitude');
grid on; % 显示网格

% 绘制序列 h(n)
subplot(3, 1, 2); % 创建 3 行 1 列的子图，第 2 个子图
stem(n_h, h_n, 'filled', 'LineWidth', 1.5);
title('Discrete Signal h(n)');
xlabel('n');
ylabel('Amplitude');
grid on; % 显示网格

% 绘制信号的逐点乘积
subplot(3, 1, 3); % 创建 3 行 1 列的子图，第 3 个子图
stem(n_product, product_n, 'filled', 'LineWidth', 1.5);
title('Pointwise Product of x(n) and h(n)');
xlabel('n');
ylabel('Amplitude');
grid on; % 显示网格
